/** 
 * JPanel was die Daten eines vorhandenen Mediums zurueckliefert, die 
 * dann bearbeitet werden koennen.
 * 
 * 
 * Datei: PanelMediumAendern.java       Autor: Simon Schindelmann 
 * Datum: 3.11.11                       Version: 0.1
 * 
 */

package medienverwaltung.simulation;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import GUI.Dashboard;
import personenverwaltung.Personenverwaltung;
import personenverwaltung.UngueltigesDatumAusnahme;
import medienverwaltung.Abmessung;
import medienverwaltung.Aufsatz;
import medienverwaltung.Buch;
import medienverwaltung.Datentraeger;
import medienverwaltung.DatumParser;
import medienverwaltung.Ebook;
import medienverwaltung.Hoerbuch;
import medienverwaltung.KeinDatumFormat;
import medienverwaltung.Medium;
import medienverwaltung.Mediumverwalter;
import medienverwaltung.NameEnthaeltZahlenSonderzeichen;
import medienverwaltung.VergebeneISBNAusnahme;
import medienverwaltung.VergebeneISSNAusnahme;
import medienverwaltung.Zeitschrift;

public class PanelMediumAendern extends JPanel
{
  private static final long serialVersionUID = -7847593334976898706L;
  private JFrame hinzufuegen;
  private JTextArea text;
  private JButton aendern, hole, abbrechen, notizHinzufuegen, 
    notizenHinzufuegen;
  //Speichert die aktuelle Sprache die verwendet wird.
  private Uebersetzung uebersetzung = Uebersetzung.gibSprache ();
  private JLabel titel, datum, abmessungen, verlag, ausgabe, notiz,
      fachgebiet, sachgebiet, stichworte, umfang, version,
      spielzeit, teil, typ, serie, beteiligt, speicherplatz, thema,
      autoren, isbn, praesenz, autor, enthaltenIn, datengroesse, issn,
      sprecher;
  private JTextField txt_titel, txt_datum, txt_abmessung_laenge,
      txt_abmessung_breite, txt_abmessung_hoehe, txt_verlag,
      txt_ausgabe, txt_fachgebiet, txt_sachgebiet,
      txt_stichworte, txt_umfang, txt_serie, txt_status,
      txt_version, txt_teil, txt_beteiligt, txt_spielzeit,
      txt_speicherplatz, txt_thema, txt_medium, txt_autoren, txt_isbn,
      txt_autor, txt_enthaltenIn, txt_datengroesse, txt_issn,
      txt_sprecher;
  private String[] janein, typen;
  private ArrayList<String> hinzugefuegteNotizen 
  	= new ArrayList<String> ();
  private Personenverwaltung per = new Personenverwaltung ();
  private JComboBox<String> combo1, combo2;

  private Buch b = null;
  private Aufsatz auf = null;
  private Ebook e = null;
  private Zeitschrift z = null;
  private Hoerbuch h = null;
  private Datentraeger d = null;


  /**
   * Das Start Layout mit einem Textfeld und einem Button wird erueugt
   */
  public PanelMediumAendern () 
  {
    init ();
    setLayout (new GridLayout (1, 2));
    add (txt_medium);
    add (hole);
  }


  /**
   * Erzeugt das AnfanglLayout
   */
  public void start ()
  {
    removeAll ();
    init ();
    setLayout (new GridLayout (1, 2));
    add (txt_medium);
    add (hole);
    validate ();
  }


  /**
   * Intialisert die Attrbute des Anfangslayout
   */
  public void init ()
  {
    txt_medium = new JTextField ();
    hole = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Hole Medium"));
    typen = new String[3];
    typen[0] = uebersetzung.lokal.gibUebersetzung ("DATEN");
    typen[1] = uebersetzung.lokal.gibUebersetzung ("VIDEO");
    typen[2] = uebersetzung.lokal.gibUebersetzung ("AUDIO");

    janein = new String[2];
    janein[0] = uebersetzung.lokal.gibUebersetzung ("Nein");
    janein[1] = uebersetzung.lokal.gibUebersetzung ("Ja");

    hole.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
         try
         {
           gibMedium ();
         }
        catch (NullPointerException e1)
        {
          JOptionPane.showMessageDialog (null, "" + uebersetzung.lokal
              .gibUebersetzung ("Dieses Medium existiert nicht"), null, 
              JOptionPane.WARNING_MESSAGE);
        }
         catch (IllegalArgumentException e2)
         {
           JOptionPane.showMessageDialog (null, "" + uebersetzung.lokal
               .gibUebersetzung ("Ungueltige Zahl"), null, JOptionPane
               .WARNING_MESSAGE);
         }
      }
    });
  }


  /**
   * Holt das Medium mit der entsprechenden Nummer und guckt ob es sich
   * um ein Buch, Zeitschrift, Aufsatz, Ebook, Datentraeger oder
   * Hoerbuch handelt und ruft dann die entsprechende Methode auf.
   */
  public void gibMedium ()
  {
    if (txt_medium.getText ().isEmpty () == true)
    {
      txt_medium.setText (uebersetzung.lokal
          .gibUebersetzung ("Fehler Feld MediumNr ist leer"));
    }
    else
    {
      Mediumverwalter mk = new Mediumverwalter ();
      Medium m = mk.gibMedium (DatumParser.stringZuInteger (txt_medium
          .getText ()));
      System.out.println (txt_medium.getText ());
      System.out.println (m.gibInitial ());

      if (m.gibInitial ().equals ("BU"))
      {
        buch (m);
      }

      if (m.gibInitial ().equals ("AS"))
      {
        aufsatz (m);
      }

      if (m.gibInitial ().equals ("ZS"))
      {
        zeitschrift (m);
      }

      if (m.gibInitial ().equals ("EB"))
      {
        ebook (m);
      }
      
      if (m.gibInitial ().equals ("DT"))
      {
        datentraeger (m);
      }
      
      if (m.gibInitial ().equals ("HB"))
      {
        hoerbuch (m);
      }
    }
  }


  /**
   * Das aktuelle Layout wird entfernt und das Buch Layout wird erzeugt. 
   * Die Labels, Textfelder, ActionListener und Buttons werden
   * initialisiert und dem JPanel hinzugefuegt.
   * @param me Das Medium was veraendert werden soll.
   */
  public void buch (Medium me)
  {
    removeAll ();
    b = (Buch) me;
    buchInit ();
    setLayout (new GridLayout (10, 4));
    add (titel);
    add (txt_titel);
    add (datum);
    add (txt_datum);
    add (abmessungen);
    add (txt_abmessung_laenge);
    txt_abmessung_laenge.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("laenge") + " mm");
    add (txt_abmessung_hoehe);
    txt_abmessung_hoehe.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("hoehe") + " mm");
    add (txt_abmessung_breite);
    txt_abmessung_breite.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("breite") + " mm");
    add (ausgabe);
    add (txt_ausgabe);
    add (verlag);
    add (txt_verlag);
    add (notiz);
    add (notizHinzufuegen);
    add (fachgebiet);
    add (txt_fachgebiet);
    add (sachgebiet);
    add (txt_sachgebiet);
    add (stichworte);
    add (txt_stichworte);
    add (umfang);
    add (txt_umfang);
    add (thema);
    add (txt_thema);
    add (autoren);
    add (txt_autoren);
    add (beteiligt);
    add (txt_beteiligt);
    add (isbn);
    add (txt_isbn);
    add (serie);
    add (txt_serie);
    add (praesenz);
    add (combo1);
    add (aendern, BorderLayout.EAST);
    txt_status.setEditable (false);
    add (txt_status);
    add (abbrechen);
    validate ();
    buchReiterFuellen (b);
  }


  /**
   * Hier werden die Labels, Textfelder, Buttons und ActionListener 
   * initialisiert.
   */
  public void buchInit ()
  {
    titel = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Titel1") + "*: ");
    datum = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Datum") + "*: ");
    abmessungen = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Abmessung") + "*: ");
    verlag = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Verlag1") + ": ");
    ausgabe = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Ausgabe") + ": ");
    notiz = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Notizen") + ": ");
    fachgebiet = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Fachgebiet") + ": ");
    sachgebiet = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Sachgebiet") + ": ");
    stichworte = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Stichworte") + ": ");
    umfang = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Umfang") + ": ");
    autoren = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Autoren") + ": ");
    beteiligt = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Beteiligte Personen")
        + ": ");
    isbn = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("ISBN") + "*: ");
    serie = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Bild") + ": ");
    praesenz = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Praesenzexemplar")
        + ": ");
    thema = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Thema") + ": ");

    txt_titel = new JTextField ();
    txt_datum = new JTextField ();
    txt_abmessung_laenge = new JTextField ();
    txt_abmessung_breite = new JTextField ();
    txt_abmessung_hoehe = new JTextField ();
    txt_verlag = new JTextField ();
    txt_ausgabe = new JTextField ();
    txt_fachgebiet = new JTextField ();
    txt_sachgebiet = new JTextField ();
    txt_stichworte = new JTextField ();
    txt_umfang = new JTextField ();
    txt_autoren = new JTextField ();
    txt_beteiligt = new JTextField ();
    txt_serie = new JTextField ();
    txt_isbn = new JTextField ();
    txt_status = new JTextField ();
    txt_thema = new JTextField ();

    notizHinzufuegen = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Notiz Hinzufuegen"));

    notizHinzufuegen.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        notizHinzufuegen ();
      }
    });


    combo1 = new JComboBox<String> (janein);

    aendern = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Buch Aendern"));
    aendern.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        try
        {
          buchAendern ();
        }
        catch (VergebeneISBNAusnahme e5)
        {
          JOptionPane.showMessageDialog (null, "" + e5.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
          txt_status.setBackground (Color.red);
          txt_status.setText ("");
        }
        catch (NameEnthaeltZahlenSonderzeichen e1)
        {
          JOptionPane.showMessageDialog (null, "" + e1.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (KeinDatumFormat e2)
        {
          JOptionPane.showMessageDialog (null, "" + e2.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (IllegalArgumentException e3)
        {
          JOptionPane.showMessageDialog (null, "" + e3.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (UngueltigesDatumAusnahme e4)
        {
          JOptionPane.showMessageDialog (null, "" + e4.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
      }
    });
    
    abbrechen = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Abbrechen"));
    abbrechen.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        abbrechen ();
      }
    });
  }


  /**
   * Holt die Daten des Mediums das bearbeitet werden soll und setzt die
   * Daten in die entsprechenden Textfelder
   */
  public void buchReiterFuellen (Buch b)
  {
    txt_titel.setText (b.gibTitel ());
    txt_datum.setText (b.gibErscheinungsdatumString ());
    txt_abmessung_laenge.setText ("" + b.gibAbmessung ().gibLaenge ());
    txt_abmessung_breite.setText ("" + b.gibAbmessung ().gibBreite ());
    txt_abmessung_hoehe.setText ("" + b.gibAbmessung ().gibHoehe ());
    txt_ausgabe.setText (b.gibAusgabe ());

    if (b.gibVerlag () != null)
    {
      txt_verlag.setText (b.gibVerlag ().gibName ());
    }

    txt_fachgebiet.setText (b.gibFachgebiet ());
    txt_sachgebiet.setText (b.gibSachgebiet ());
    txt_stichworte.setText (b.gibStichworteString ());
    txt_umfang.setText (b.gibUmfang ());
    txt_thema.setText (b.gibThema ());
    txt_autoren.setText (b.gibAutorenListeString ());
    txt_beteiligt.setText (b.gibBeteiligteString ());
    txt_isbn.setText ("" + b.gibISBN ());
    txt_serie.setText (b.gibSerie ());
    
    if (b.istPraesenzexemplar () == true)
    {
      combo1.setSelectedIndex (1);
    }
    else
    {
      combo1.setSelectedIndex (0);
    }
  }


  /**
   * Hier werden die Textfelder ausgelesen und das Buch geaendert.
   * Tritt ein Fehler auf wird die Farbe des Status Feld auf Rot 
   * gesetzt andernfalls wird das Start Layout erzeugt.
   * @NameEnthaeltZahlen
   * @KeinDatumFormat Falls das Datum nicht dem Format entspricht.
   * @VergebeneISBNAusnahme wird geworfen wenn schon ein anderes Medium
   * diese ISBN besitzt.
   */
  public void buchAendern () throws KeinDatumFormat,
      NameEnthaeltZahlenSonderzeichen, VergebeneISBNAusnahme
  {
    int laenge, breite, hoehe;
    Abmessung a;

    if (txt_titel.getText ().isEmpty () == true
        || txt_datum.getText ().isEmpty () == true
        || txt_abmessung_laenge.getText ().isEmpty () == true
        || txt_abmessung_hoehe.getText ().isEmpty () == true
        || txt_abmessung_breite.getText ().isEmpty () == true)
    {
      JOptionPane.showMessageDialog (null, "" + uebersetzung.lokal
	  .gibUebersetzung ("Alle mit einem * markierten Felder " +
	  "muessen ausgefuellt werden"), null, JOptionPane
	  .WARNING_MESSAGE);
      txt_status.setBackground (Color.RED);
    }
    else
    {
      b.setzeTitel (txt_titel.getText ());
      b.setzeDatum (txt_datum.getText ());
      laenge = DatumParser.stringZuInteger (txt_abmessung_laenge
          .getText ());
      breite = DatumParser.stringZuInteger (txt_abmessung_breite
          .getText ());
      hoehe = DatumParser.stringZuInteger (txt_abmessung_hoehe
          .getText ());
      a = new Abmessung (laenge, hoehe, breite);
      b.setzeAbmessungen (a);

      if (hinzugefuegteNotizen.size () >= 1)
      {
        for (int i = 0; i < hinzugefuegteNotizen.size (); i++)
        {
          b.notizHinzufuegen (hinzugefuegteNotizen.get (i), per
              .gibBenutzer (Dashboard.nutzerID ()));
        }
      }

      if (txt_isbn.getText ().isEmpty () == false)
      {
        b.setzeISBN (txt_isbn.getText (), b.gibMediumId ());
      }

      if (txt_sachgebiet.getText ().isEmpty () == false)
      {
        b.setzeSachgebiet (txt_sachgebiet.getText ());
      }

      if (txt_fachgebiet.getText ().isEmpty () == false)
      {
        b.setzeFachgebiet (txt_fachgebiet.getText ());
      }

      if (txt_stichworte.getText ().isEmpty () == false)
      {
        b.stichwortHinzufuegen (txt_stichworte.getText ());
      }

      if (txt_umfang.getText ().isEmpty () == false)
      {
        b.setzeUmfang (txt_umfang.getText ());
      }

      if (txt_verlag.getText ().isEmpty () == false)
      {
        b.setzeVerlag (txt_verlag.getText ());
      }

      if (txt_ausgabe.getText ().isEmpty () == false)
      {
        b.setzeAusgabe (txt_ausgabe.getText ());
      }

      if (txt_autoren.getText ().isEmpty () == false)
      {
        b.autorenHinzufuegen (txt_autoren.getText ());
      }

      if (txt_serie.getText ().isEmpty () == false)
      {
        b.setzeSerie (txt_serie.getText ());
      }

      if (txt_thema.getText ().isEmpty () == false)
      {
        b.setzeThema (txt_thema.getText ());
      }

      if (txt_beteiligt.getText ().isEmpty () == false)
      {
        b.beteiligteHinzufuegen (txt_beteiligt.getText ());
      }

      if (combo1.getSelectedItem ().equals (
          uebersetzung.lokal.gibUebersetzung ("Ja")))
      {
        b.setzePraesenzexemplar (true);
      }
      else
      {
        b.setzePraesenzexemplar (false);
      }
      txt_status.setBackground (Color.GREEN);
      start ();
    }
  }


  /**
   * Das aktuelle Layout wird entfernt und das Aufsatz Layout wird 
   * erzeugt. Die Labels, Textfelder, ActionListener und Buttons werden
   * initialisiert und dem JPanel hinzugefuegt.
   * @param me Das Medium was veraendert werden soll.
   */
  public void aufsatz (Medium me)
  {

    auf = (Aufsatz) me;
    removeAll ();
    aufsatzInit ();
    setLayout (new GridLayout (8, 4));
    add (titel);
    add (txt_titel);
    add (datum);
    add (txt_datum);
    add (abmessungen);
    add (txt_abmessung_laenge);
    txt_abmessung_laenge.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("laenge") + " mm");
    add (txt_abmessung_hoehe);
    txt_abmessung_hoehe.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("hoehe") + " mm");
    add (txt_abmessung_breite);
    txt_abmessung_breite.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("breite") + " mm");
    add (ausgabe);
    add (txt_ausgabe);
    add (verlag);
    add (txt_verlag);
    add (notiz);
    add (notizHinzufuegen);
    add (fachgebiet);
    add (txt_fachgebiet);
    add (sachgebiet);
    add (txt_sachgebiet);
    add (stichworte);
    add (txt_stichworte);
    add (umfang);
    add (txt_umfang);
    add (thema);
    add (txt_thema);
    add (autor);
    add (txt_autor);
    add (enthaltenIn);
    add (txt_enthaltenIn);
    add (aendern, BorderLayout.EAST);
    txt_status.setEditable (false);
    add (txt_status);
    add (abbrechen);
    validate ();
    aufsatzReiterfuellen (auf);
  }


  /**
   * Hier werden die Labels, Textfelder, Buttons und ActionListener 
   * initialisiert.
   */
  public void aufsatzInit ()
  {
    titel = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Titel1") + "*: ");
    datum = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Datum") + "*: ");
    abmessungen = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Abmessung") + "*: ");
    verlag = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Verlag1") + ": ");
    ausgabe = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Ausgabe") + ": ");
    notiz = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Notizen") + ": ");
    fachgebiet = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Fachgebiet") + ": ");
    sachgebiet = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Sachgebiet") + ": ");
    stichworte = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Stichworte") + ": ");
    umfang = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Umfang") + ": ");
    autor = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Autor1") + ": ");
    enthaltenIn = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Enthalten In") + ": ");
    beteiligt = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Beteiligte Personen")
        + ": ");
    thema = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Thema") + ": ");

    txt_titel = new JTextField ();
    txt_datum = new JTextField ();
    txt_abmessung_laenge = new JTextField ();
    txt_abmessung_breite = new JTextField ();
    txt_abmessung_hoehe = new JTextField ();
    txt_verlag = new JTextField ();
    txt_ausgabe = new JTextField ();
    txt_fachgebiet = new JTextField ();
    txt_sachgebiet = new JTextField ();
    txt_stichworte = new JTextField ();
    txt_umfang = new JTextField ();
    txt_autor = new JTextField ();
    txt_enthaltenIn = new JTextField ();
    txt_beteiligt = new JTextField ();
    txt_status = new JTextField ();
    txt_thema = new JTextField ();
    
    notizHinzufuegen = new JButton (uebersetzung.lokal
	.gibUebersetzung ("Notiz Hinzufuegen"));

    notizHinzufuegen.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        notizHinzufuegen ();
      }
    });

    aendern = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Aufsatz Aendern"));
    aendern.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        try
        {
          aufsatzAendern ();
        }
        catch (NameEnthaeltZahlenSonderzeichen e1)
        {
          JOptionPane.showMessageDialog (null, "" + e1.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (KeinDatumFormat e2)
        {
          JOptionPane.showMessageDialog (null, "" + e2.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (IllegalArgumentException e3)
        {
          JOptionPane.showMessageDialog (null, "" + e3.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (UngueltigesDatumAusnahme e4)
        {
          JOptionPane.showMessageDialog (null, "" + e4.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
      }
    });
    
    abbrechen = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Abbrechen"));
    abbrechen.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        abbrechen ();
      }
    });
  }


  /**
   * Holt die Daten des Mediums das bearbeitet werden soll und setzt die
   * Daten in die entsprechenden Textfelder
   */
  public void aufsatzReiterfuellen (Aufsatz auf)
  {
    txt_titel.setText (auf.gibTitel ());
    txt_datum.setText (auf.gibErscheinungsdatumString ());
    txt_abmessung_laenge
        .setText ("" + auf.gibAbmessung ().gibLaenge ());
    txt_abmessung_breite
        .setText ("" + auf.gibAbmessung ().gibBreite ());
    txt_abmessung_hoehe.setText ("" + auf.gibAbmessung ().gibHoehe ());
    txt_ausgabe.setText (auf.gibAusgabe ());
    
    if (auf.gibVerlag () != null)
    {
      txt_verlag.setText (auf.gibVerlag ().gibName ());
    }
    
    txt_fachgebiet.setText (auf.gibFachgebiet ());
    txt_sachgebiet.setText (auf.gibSachgebiet ());
    txt_stichworte.setText (auf.gibStichworteString ());
    txt_umfang.setText (auf.gibUmfang ());
    txt_thema.setText (auf.gibThema ());
    
    if (auf.gibAutor () != null)
    {
      txt_autor.setText ("" + auf.gibAutor ().gibVornamen () + " "
          + auf.gibAutor ().gibNachname ());
    }
    
    txt_enthaltenIn.setText (auf.gibEnhaltenIn ());
  }


  /**
   * Hier werden die Textfelder ausgelesen und der Aufsatz geaendert.
   * Tritt ein Fehler auf wird die Farbe des Status Feld auf Rot 
   * gesetzt andernfalls wird das Start Layout erzeugt.
   * @NameEnthaeltZahlen
   * @KeinDatumFormat Falls das Datum nicht dem Format entspricht.
   */
  public void aufsatzAendern () throws NameEnthaeltZahlenSonderzeichen,
      KeinDatumFormat
  {
    int laenge, breite, hoehe;
    Abmessung a;

    if (txt_titel.getText ().isEmpty () == true
        || txt_datum.getText ().isEmpty () == true
        || txt_abmessung_laenge.getText ().isEmpty () == true
        || txt_abmessung_hoehe.getText ().isEmpty () == true
        || txt_abmessung_breite.getText ().isEmpty () == true)
    {
      JOptionPane.showMessageDialog (null, "" + uebersetzung.lokal
	  .gibUebersetzung ("Alle mit einem * markierten Felder " +
	  "muessen ausgefuellt werden"), null, JOptionPane
	  .WARNING_MESSAGE);
      txt_status.setBackground (Color.RED);
    }
    else
    {
      auf.setzeTitel (txt_titel.getText ());
      auf.setzeDatum (txt_datum.getText ());
      laenge = DatumParser.stringZuInteger (txt_abmessung_laenge
          .getText ());
      breite = DatumParser.stringZuInteger (txt_abmessung_breite
          .getText ());
      hoehe = DatumParser.stringZuInteger (txt_abmessung_hoehe
          .getText ());
      a = new Abmessung (laenge, hoehe, breite);
      auf.setzeAbmessungen (a);

      if (hinzugefuegteNotizen.size () >= 1)
      {
        for (int i = 0; i < hinzugefuegteNotizen.size (); i++)
        {
          auf.notizHinzufuegen (hinzugefuegteNotizen.get (i), 
              per.gibBenutzer (Dashboard.nutzerID ()));
        }
      }

      if (txt_sachgebiet.getText ().isEmpty () == false)
      {
        auf.setzeSachgebiet (txt_sachgebiet.getText ());
      }

      if (txt_fachgebiet.getText ().isEmpty () == false)
      {
        auf.setzeFachgebiet (txt_fachgebiet.getText ());
      }

      if (txt_stichworte.getText ().isEmpty () == false)
      {
        auf.stichwortHinzufuegen (txt_stichworte.getText ());
      }

      if (txt_umfang.getText ().isEmpty () == false)
      {
        auf.setzeUmfang (txt_umfang.getText ());
      }

      if (txt_verlag.getText ().isEmpty () == false)
      {
        auf.setzeVerlag (txt_verlag.getText ());
      }

      if (txt_ausgabe.getText ().isEmpty () == false)
      {
        auf.setzeAusgabe (txt_ausgabe.getText ());
      }

      if (txt_autor.getText ().isEmpty () == false)
      {
        auf.setzeAutor (txt_autor.getText ());
      }

      if (txt_thema.getText ().isEmpty () == false)
      {
        auf.setzeThema (txt_thema.getText ());
      }

      if (txt_enthaltenIn.getText ().isEmpty () == false)
      {
        auf.setzeEnthaltenIn (txt_enthaltenIn.getText ());
      }
      
      txt_status.setBackground (Color.GREEN);
      start ();
    }
  }


  /**
   * Das aktuelle Layout wird entfernt und das Ebook Layout wird 
   * erzeugt. Die Labels, Textfelder, ActionListener und Buttons werden
   * initialisiert und dem JPanel hinzugefuegt.
   * @param me Das Medium was veraendert werden soll.
   */
  public void ebook (Medium me)
  {
    e = (Ebook) me;
    removeAll ();
    ebookInit ();
    setLayout (new GridLayout (10, 3));
    add (titel);
    add (txt_titel);
    add (datum);
    add (txt_datum);
    add (abmessungen);
    add (txt_abmessung_laenge);
    txt_abmessung_laenge.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("laenge") + " mm");
    add (txt_abmessung_hoehe);
    txt_abmessung_hoehe.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("hoehe") + " mm");
    add (txt_abmessung_breite);
    txt_abmessung_breite.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("breite") + " mm");
    add (ausgabe);
    add (txt_ausgabe);
    add (verlag);
    add (txt_verlag);
    add (notiz);
    add (notizHinzufuegen);
    add (fachgebiet);
    add (txt_fachgebiet);
    add (sachgebiet);
    add (txt_sachgebiet);
    add (stichworte);
    add (txt_stichworte);
    add (umfang);
    add (txt_umfang);
    add (thema);
    add (txt_thema);
    add (autoren);
    add (txt_autoren);
    add (beteiligt);
    add (txt_beteiligt);
    add (isbn);
    add (txt_isbn);
    add (serie);
    add (txt_serie);
    add (datengroesse);
    add (txt_datengroesse);
    add (aendern, BorderLayout.EAST);
    txt_status.setEditable (false);
    add (txt_status);
    add (abbrechen);
    validate ();
    ebookReiterfuellen (e);
  }


  /**
   * Hier werden die Labels, Textfelder, Buttons und ActionListener 
   * initialisiert.
   */
  public void ebookInit ()
  {
    titel = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Titel1") + "*: ");
    datum = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Datum") + "*: ");
    abmessungen = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Abmessung") + "*: ");
    verlag = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Verlag1") + ": ");
    ausgabe = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Ausgabe") + ": ");
    notiz = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Notizen") + ": ");
    fachgebiet = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Fachgebiet") + ": ");
    sachgebiet = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Sachgebiet") + ": ");
    stichworte = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Stichworte") + ": ");
    umfang = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Umfang") + ": ");
    autoren = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Autoren") + ": ");
    beteiligt = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Beteiligte Personen")
        + ": ");
    isbn = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("ISBN") + "*: ");
    serie = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Serie") + ": ");
    datengroesse = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Datengroesse") + ": ");
    thema = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Thema") + ": ");

    txt_titel = new JTextField ();
    txt_datum = new JTextField ();
    txt_abmessung_laenge = new JTextField ();
    txt_abmessung_breite = new JTextField ();
    txt_abmessung_hoehe = new JTextField ();
    txt_verlag = new JTextField ();
    txt_ausgabe = new JTextField ();
    txt_fachgebiet = new JTextField ();
    txt_sachgebiet = new JTextField ();
    txt_stichworte = new JTextField ();
    txt_umfang = new JTextField ();
    txt_autoren = new JTextField ();
    txt_beteiligt = new JTextField ();
    txt_serie = new JTextField ();
    txt_isbn = new JTextField ();
    txt_status = new JTextField ();
    txt_thema = new JTextField ();
    txt_datengroesse = new JTextField ();
    
    notizHinzufuegen = new JButton (uebersetzung.lokal.
        gibUebersetzung ("Notiz Hinzufuegen"));

    notizHinzufuegen.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        notizHinzufuegen ();
      }
    });
    
    aendern = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Ebook Aendern"));
    aendern.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        try
        {
          ebookAendern ();
        }
        catch (VergebeneISBNAusnahme e5)
        {
          JOptionPane.showMessageDialog (null, "" + e5.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
          txt_status.setBackground (Color.red);
          txt_status.setText ("");
        }
        catch (NameEnthaeltZahlenSonderzeichen e1)
        {
          JOptionPane.showMessageDialog (null, "" + e1.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (KeinDatumFormat e2)
        {
          JOptionPane.showMessageDialog (null, "" + e2.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (IllegalArgumentException e3)
        {
          JOptionPane.showMessageDialog (null, "" + e3.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (UngueltigesDatumAusnahme e4)
        {
          JOptionPane.showMessageDialog (null, "" + e4.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
      }
    });
    
    abbrechen = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Abbrechen"));
    abbrechen.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        abbrechen ();
      }
    });
  }


  /**
   * Holt die Daten des Mediums das bearbeitet werden soll und setzt die
   * Daten in die entsprechenden Textfelder
   */
  public void ebookReiterfuellen (Ebook e)
  {
    txt_titel.setText (e.gibTitel ());
    txt_datum.setText (e.gibErscheinungsdatumString ());
    txt_abmessung_laenge.setText ("" + e.gibAbmessung ().gibLaenge ());
    txt_abmessung_breite.setText ("" + e.gibAbmessung ().gibBreite ());
    txt_abmessung_hoehe.setText ("" + e.gibAbmessung ().gibHoehe ());
    txt_ausgabe.setText (e.gibAusgabe ());
    
    if (e.gibVerlag () != null)
    {
      txt_verlag.setText (e.gibVerlag ().gibName ());
    }
    
    txt_fachgebiet.setText (e.gibFachgebiet ());
    txt_sachgebiet.setText (e.gibSachgebiet ());
    txt_stichworte.setText (e.gibStichworteString ());
    txt_umfang.setText (e.gibUmfang ());
    txt_thema.setText (e.gibThema ());
    txt_autoren.setText (e.gibAutorenListeString ());
    txt_beteiligt.setText (e.gibBeteiligteString ());
    txt_isbn.setText ("" + e.gibISBN ());
    txt_serie.setText (e.gibSerie ());
    txt_datengroesse.setText ("" + e.gibDateigroesse ());
  }


  /**
   * Hier werden die Textfelder ausgelesen und das Ebook geaendert.
   * Tritt ein Fehler auf wird die Farbe des Status Feld auf Rot 
   * gesetzt andernfalls wird das Start Layout erzeugt.
   * @NameEnthaeltZahlen
   * @KeinDatumFormat Falls das Datum nicht dem Format entspricht.
   * @VergebeneISBNAusnahme wird geworfen wenn schon ein anderes Medium
   * diese ISBN besitzt.
   */
  public void ebookAendern () throws NameEnthaeltZahlenSonderzeichen,
      KeinDatumFormat, VergebeneISBNAusnahme
  {
    int laenge, hoehe, breite;
    Abmessung a;

    if (txt_titel.getText ().isEmpty () == true
        || txt_datum.getText ().isEmpty () == true
        || txt_abmessung_laenge.getText ().isEmpty () == true
        || txt_abmessung_hoehe.getText ().isEmpty () == true
        || txt_abmessung_breite.getText ().isEmpty () == true
        || txt_isbn.getText ().isEmpty () == true)
    {
      JOptionPane.showMessageDialog (null, "" + uebersetzung.lokal
	  .gibUebersetzung ("Alle mit einem * markierten Felder " +
	  "muessen ausgefuellt werden"), null, JOptionPane
	  .WARNING_MESSAGE);
      txt_status.setBackground (Color.RED);
    }
    else
    {
      e.setzeTitel (txt_titel.getText ());
      e.setzeDatum (txt_datum.getText ());
      laenge = DatumParser.stringZuInteger (txt_abmessung_laenge
          .getText ());
      breite = DatumParser.stringZuInteger (txt_abmessung_breite
          .getText ());
      hoehe = DatumParser.stringZuInteger (txt_abmessung_hoehe
          .getText ());
      a = new Abmessung (laenge, hoehe, breite);
      e.setzeAbmessungen (a);
      
      if (hinzugefuegteNotizen.size () >= 1)
      {
        for (int i = 0; i < hinzugefuegteNotizen.size (); i++)
        {
          e.notizHinzufuegen (hinzugefuegteNotizen
              .get (i), per.gibBenutzer (10001));
        }
      }

      if (txt_isbn.getText ().isEmpty () == false)
      {
        e.setzeISBN (txt_isbn.getText (), e.gibMediumId ());
      }

      if (txt_sachgebiet.getText ().isEmpty () == false)
      {
        e.setzeSachgebiet (txt_sachgebiet.getText ());
      }

      if (txt_fachgebiet.getText ().isEmpty () == false)
      {
        e.setzeFachgebiet (txt_fachgebiet.getText ());
      }

      if (txt_stichworte.getText ().isEmpty () == false)
      {
        e.stichwortHinzufuegen (txt_stichworte.getText ());
      }

      if (txt_umfang.getText ().isEmpty () == false)
      {
        e.setzeUmfang (txt_umfang.getText ());
      }

      if (txt_verlag.getText ().isEmpty () == false)
      {
        e.setzeVerlag (txt_verlag.getText ());
      }

      if (txt_ausgabe.getText ().isEmpty () == false)
      {
        e.setzeAusgabe (txt_ausgabe.getText ());
      }

      if (txt_autoren.getText ().isEmpty () == false)
      {
        e.autorenHinzufuegen (txt_autoren.getText ());
      }

      if (txt_serie.getText ().isEmpty () == false)
      {
        e.setzeSerie (txt_serie.getText ());
      }

      if (txt_thema.getText ().isEmpty () == false)
      {
        e.setzeThema (txt_thema.getText ());
      }

      if (txt_beteiligt.getText ().isEmpty () == false)
      {
        e.beteiligteHinzufuegen (txt_beteiligt.getText ());
      }

      if (txt_datengroesse.getText ().isEmpty () == false)
      {
        try
        {
          e.setzeDateigroesse (DatumParser
              .stringZuLong (txt_datengroesse.getText ()));
        }
        catch (IllegalArgumentException e1)
        {
          JOptionPane.showMessageDialog (null, "" + uebersetzung.lokal
              .gibUebersetzung ("Keine gueltige Datengroesse Angabe")
              + "\n" + uebersetzung.lokal.gibUebersetzung ("Nur " +
              "positive ganze Zahlen erlaubt"), null, JOptionPane
              .WARNING_MESSAGE);
          txt_status.setBackground (Color.red);
          txt_status.setText ("");
          return;
        }
      }
      
      txt_status.setBackground (Color.GREEN);
      start ();
    }
  }


  /**
   * Das aktuelle Layout wird entfernt und das Zeitschrift Layout wird 
   * erzeugt. Die Labels, Textfelder, ActionListener und Buttons werden
   * initialisiert und dem JPanel hinzugefuegt.
   * @param me Das Medium was veraendert werden soll.
   */
  public void zeitschrift (Medium me)
  {
    z = (Zeitschrift) me;
    removeAll ();
    zeitschriftInit ();
    setLayout (new GridLayout (8, 4));
    add (titel);
    add (txt_titel);
    add (datum);
    add (txt_datum);
    add (abmessungen);
    add (txt_abmessung_laenge);
    txt_abmessung_laenge.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("laenge") + " mm");
    add (txt_abmessung_hoehe);
    txt_abmessung_hoehe.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("hoehe") + " mm");
    add (txt_abmessung_breite);
    txt_abmessung_breite.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("breite") + " mm");
    add (ausgabe);
    add (txt_ausgabe);
    add (verlag);
    add (txt_verlag);
    add (notiz);
    add (notizHinzufuegen);
    add (fachgebiet);
    add (txt_fachgebiet);
    add (sachgebiet);
    add (txt_sachgebiet);
    add (stichworte);
    add (txt_stichworte);
    add (umfang);
    add (txt_umfang);
    add (thema);
    add (txt_thema);
    add (beteiligt);
    add (txt_beteiligt);
    add (issn);
    add (txt_issn);
    add (aendern, BorderLayout.EAST);
    txt_status.setEditable (false);
    add (txt_status);
    add (abbrechen);
    validate ();
    zeitschriftReiterfuellen (z);
  }


  /**
   * Hier werden die Labels, Textfelder, Buttons und ActionListener 
   * initialisiert.
   */
  public void zeitschriftInit ()
  {
    titel = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Titel1") + "*: ");
    datum = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Datum") + "*: ");
    abmessungen = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Abmessung") + "*: ");
    verlag = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Verlag1") + ": ");
    ausgabe = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Ausgabe") + ": ");
    notiz = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Notizen") + ": ");
    fachgebiet = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Fachgebiet") + ": ");
    sachgebiet = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Sachgebiet") + ": ");
    stichworte = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Stichworte") + ": ");
    umfang = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Umfang") + ": ");
    beteiligt = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Beteiligte Personen")
        + ": ");
    issn = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("ISSN") + "*: ");
    thema = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Thema") + ": ");

    txt_titel = new JTextField ();
    txt_datum = new JTextField ();
    txt_abmessung_laenge = new JTextField ();
    txt_abmessung_breite = new JTextField ();
    txt_abmessung_hoehe = new JTextField ();
    txt_verlag = new JTextField ();
    txt_ausgabe = new JTextField ();
    txt_fachgebiet = new JTextField ();
    txt_sachgebiet = new JTextField ();
    txt_stichworte = new JTextField ();
    txt_umfang = new JTextField ();
    txt_beteiligt = new JTextField ();
    txt_issn = new JTextField ();
    txt_status = new JTextField ();
    txt_thema = new JTextField ();
    
    notizHinzufuegen = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Notiz Hinzufuegen"));

    notizHinzufuegen.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        notizHinzufuegen ();
      }
    });
    
    aendern = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Zeitschrift Aendern"));
    aendern.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        try
        {
          zeitschriftAendern ();
        }
        catch (VergebeneISSNAusnahme e5)
        {
          JOptionPane.showMessageDialog (null, "" + e5.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
          txt_status.setBackground (Color.red);
          txt_status.setText ("");
        }
        catch (NameEnthaeltZahlenSonderzeichen e1)
        {
          JOptionPane.showMessageDialog (null, "" + e1.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (KeinDatumFormat e2)
        {
          JOptionPane.showMessageDialog (null, "" + e2.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (IllegalArgumentException e3)
        {
          JOptionPane.showMessageDialog (null, "" + e3.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (UngueltigesDatumAusnahme e4)
        {
          JOptionPane.showMessageDialog (null, "" + e4.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
      }
    });
    
    abbrechen = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Abbrechen"));
    abbrechen.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        abbrechen ();
      }
    });
  }


  /**
   * Holt die Daten des Mediums das bearbeitet werden soll und setzt die
   * Daten in die entsprechenden Textfelder
   */
  public void zeitschriftReiterfuellen (Zeitschrift z)
  {
    txt_titel.setText (z.gibTitel ());
    txt_datum.setText (z.gibErscheinungsdatumString ());
    txt_abmessung_laenge.setText ("" + z.gibAbmessung ().gibLaenge ());
    txt_abmessung_breite.setText ("" + z.gibAbmessung ().gibBreite ());
    txt_abmessung_hoehe.setText ("" + z.gibAbmessung ().gibHoehe ());
    txt_ausgabe.setText (z.gibAusgabe ());
    
    if (z.gibVerlag () != null)
    {
      txt_verlag.setText (z.gibVerlag ().gibName ());
    }
    
    txt_fachgebiet.setText (z.gibFachgebiet ());
    txt_sachgebiet.setText (z.gibSachgebiet ());
    txt_stichworte.setText (z.gibStichworteString ());
    txt_umfang.setText (z.gibUmfang ());
    txt_thema.setText (z.gibThema ());
    txt_beteiligt.setText (z.gibBeteiligteString ());
    txt_issn.setText ("" + z.gibISSN ());
  }


  /**
   * Hier werden die Textfelder ausgelesen und die Zeitschrift
   * geaendert.Tritt ein Fehler auf wird die Farbe des Status Feld auf 
   * Rot gesetzt andernfalls wird das Start Layout erzeugt.
   * @NameEnthaeltZahlen
   * @KeinDatumFormat Falls das Datum nicht dem Format entspricht.
   * @VergebeneISSNAusnahme wird geworfen wenn schon ein anderes Medium
   * diese ISSN besitzt.
   */
  public void zeitschriftAendern () throws 
  	NameEnthaeltZahlenSonderzeichen, KeinDatumFormat, 
  	VergebeneISSNAusnahme
  {
    int laenge, breite, hoehe;
    Abmessung a;
    if (txt_titel.getText ().isEmpty () == true
        || txt_datum.getText ().isEmpty () == true
        || txt_abmessung_laenge.getText ().isEmpty () == true
        || txt_abmessung_hoehe.getText ().isEmpty () == true
        || txt_abmessung_breite.getText ().isEmpty () == true
        || txt_issn.getText ().isEmpty () == true)
    {
      JOptionPane.showMessageDialog (null, "" + uebersetzung.lokal
	  .gibUebersetzung ("Alle mit einem * markierten Felder " +
	  "muessen ausgefuellt werden"), null, JOptionPane
	  .WARNING_MESSAGE);
      txt_status.setBackground (Color.RED);
    }
    else
    {
      z.setzeTitel (txt_titel.getText ());
      z.setzeDatum (txt_datum.getText ());
      laenge = DatumParser.stringZuInteger (txt_abmessung_laenge
          .getText ());
      breite = DatumParser.stringZuInteger (txt_abmessung_breite
          .getText ());
      hoehe = DatumParser.stringZuInteger (txt_abmessung_hoehe
          .getText ());
      a = new Abmessung (laenge, hoehe, breite);
      z.setzeAbmessungen (a);

      if (hinzugefuegteNotizen.size () >= 1)
      {
        for (int i = 0; i < hinzugefuegteNotizen.size (); i++)
        {
          z.notizHinzufuegen (hinzugefuegteNotizen.get (i), per
              .gibBenutzer (Dashboard.nutzerID ()));
        }
      }
      
      if (txt_issn.getText ().isEmpty () == false)
      {
        z.setzeISSN (txt_issn.getText (), z.gibMediumId ());
      }

      if (txt_sachgebiet.getText ().isEmpty () == false)
      {
        z.setzeSachgebiet (txt_sachgebiet.getText ());
      }

      if (txt_fachgebiet.getText ().isEmpty () == false)
      {
        z.setzeFachgebiet (txt_fachgebiet.getText ());
      }

      if (txt_stichworte.getText ().isEmpty () == false)
      {
        z.stichwortHinzufuegen (txt_stichworte.getText ());
      }

      if (txt_umfang.getText ().isEmpty () == false)
      {
        z.setzeUmfang (txt_umfang.getText ());
      }

      if (txt_verlag.getText ().isEmpty () == false)
      {
        z.setzeVerlag (txt_verlag.getText ());
      }

      if (txt_ausgabe.getText ().isEmpty () == false)
      {
        z.setzeAusgabe (txt_ausgabe.getText ());
      }

      if (txt_thema.getText ().isEmpty () == false)
      {
        z.setzeThema (txt_thema.getText ());
      }

      if (txt_beteiligt.getText ().isEmpty () == false)
      {
        z.beteiligteHinzufuegen (txt_beteiligt.getText ());
      }
      
      txt_status.setBackground (Color.GREEN);
      start ();
    }
  }


  /**
   * Das aktuelle Layout wird entfernt und das Datentraeger Layout wird 
   * erzeugt. Die Labels, Textfelder, ActionListener und Buttons werden
   * initialisiert und dem JPanel hinzugefuegt.
   * @param me Das Medium was veraendert werden soll.
   */
  public void datentraeger (Medium me)
  {
    d = (Datentraeger) me;
    removeAll ();
    datentraegerInit ();
    setLayout (new GridLayout (11, 4));
    add (titel);
    add (txt_titel);
    add (datum);
    add (txt_datum);
    add (abmessungen);
    add (txt_abmessung_laenge);
    txt_abmessung_laenge.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("laenge") + " mm");
    add (txt_abmessung_hoehe);
    txt_abmessung_hoehe.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("hoehe") + " mm");
    add (txt_abmessung_breite);
    txt_abmessung_breite.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("breite") + " mm");
    add (ausgabe);
    add (txt_ausgabe);
    add (verlag);
    add (txt_verlag);
    add (notiz);
    add (notizHinzufuegen);
    add (fachgebiet);
    add (txt_fachgebiet);
    add (sachgebiet);
    add (txt_sachgebiet);
    add (stichworte);
    add (txt_stichworte);
    add (umfang);
    add (txt_umfang);
    add (thema);
    add (txt_thema);
    add (beteiligt);
    add (txt_beteiligt);
    add (serie);
    add (txt_serie);
    add (teil);
    add (txt_teil);
    add (version);
    add (txt_version);
    add (spielzeit);
    add (txt_spielzeit);
    add (speicherplatz);
    add (txt_speicherplatz);
    add (typ);
    add (combo2);
    add (aendern, BorderLayout.EAST);
    txt_status.setEditable (false);
    add (txt_status);
    add (abbrechen);
    validate ();
    datentraegerReiterfuellen (d);
  }


  /**
   * Hier werden die Labels, Textfelder, Buttons und ActionListener 
   * initialisiert.
   */
  public void datentraegerInit ()
  {
    titel = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Titel1") + "*: ");
    datum = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Datum") + "*: ");
    abmessungen = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Abmessung") + "*: ");
    verlag = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Verlag1") + ": ");
    ausgabe = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Ausgabe") + ": ");
    notiz = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Notizen") + ": ");
    fachgebiet = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Fachgebiet") + ": ");
    sachgebiet = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Sachgebiet") + ": ");
    stichworte = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Stichworte") + ": ");
    umfang = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Umfang") + ": ");
    beteiligt = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Beteiligte Personen")
        + ": ");
    serie = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Serie") + ": ");
    speicherplatz = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Speicherplatz") + ": ");
    teil = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Teil") + ": ");
    typ = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Datentyp") + ": ");
    spielzeit = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Spielzeit") + ": ");
    version = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Version") + ": ");
    thema = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Thema") + ": ");

    txt_titel = new JTextField ();
    txt_datum = new JTextField ();
    txt_abmessung_laenge = new JTextField ();
    txt_abmessung_breite = new JTextField ();
    txt_abmessung_hoehe = new JTextField ();
    txt_verlag = new JTextField ();
    txt_ausgabe = new JTextField ();
    txt_fachgebiet = new JTextField ();
    txt_sachgebiet = new JTextField ();
    txt_stichworte = new JTextField ();
    txt_umfang = new JTextField ();
    txt_beteiligt = new JTextField ();
    txt_serie = new JTextField ();
    txt_status = new JTextField ();
    txt_speicherplatz = new JTextField ();
    txt_teil = new JTextField ();
    txt_version = new JTextField ();
    txt_spielzeit = new JTextField ();
    txt_thema = new JTextField ();

    combo2 = new JComboBox<String> (typen);
    
    notizHinzufuegen = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Notiz Hinzufuegen"));

    notizHinzufuegen.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        notizHinzufuegen ();
      }
    });
    
    aendern = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Datentraeger Aendern"));
    aendern.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        try
        {
          datentraegerAendern ();
        }
        catch (NameEnthaeltZahlenSonderzeichen e1)
        {
          JOptionPane.showMessageDialog (null, "" + e1.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (KeinDatumFormat e2)
        {
          JOptionPane.showMessageDialog (null, "" + e2.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (IllegalArgumentException e3)
        {
          JOptionPane.showMessageDialog (null, "" + e3.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (UngueltigesDatumAusnahme e4)
        {
          JOptionPane.showMessageDialog (null, "" + e4.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
      }
    });
    
    abbrechen = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Abbrechen"));
    abbrechen.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        abbrechen ();
      }
    });
  }


  /**
   * Holt die Daten des Mediums das bearbeitet werden soll und setzt die
   * Daten in die entsprechenden Textfelder
   */
  public void datentraegerReiterfuellen (Datentraeger d)
  {
    txt_titel.setText (d.gibTitel ());
    txt_datum.setText (d.gibErscheinungsdatumString ());
    txt_abmessung_laenge.setText ("" + d.gibAbmessung ().gibLaenge ());
    txt_abmessung_breite.setText ("" + d.gibAbmessung ().gibBreite ());
    txt_abmessung_hoehe.setText ("" + d.gibAbmessung ().gibHoehe ());
    txt_ausgabe.setText (d.gibAusgabe ());
    
    if (d.gibVerlag () != null)
    {
      txt_verlag.setText (d.gibVerlag ().gibName ());
    }
    
    txt_fachgebiet.setText (d.gibFachgebiet ());
    txt_sachgebiet.setText (d.gibSachgebiet ());
    txt_stichworte.setText (d.gibStichworteString ());
    txt_umfang.setText (d.gibUmfang ());
    txt_thema.setText (d.gibThema ());
    txt_beteiligt.setText (d.gibBeteiligteString ());
    txt_serie.setText (d.gibSerie ());
    txt_teil.setText (d.gibTeil ());
    txt_spielzeit.setText ("" + d.gibSpielzeit ());
    txt_speicherplatz.setText ("" + d.gibSpeicherplatz ());
    txt_version.setText (d.gibVersion ());
    
    if (d.gibDatentraegertyp ().toString ().equals (
        uebersetzung.lokal.gibUebersetzung ("DATEN")))
    {
      combo2.setSelectedIndex (0);
    }
    else if (d.gibDatentraegertyp ().toString ().equals (
        uebersetzung.lokal.gibUebersetzung ("VIDEO")))
    {
      combo2.setSelectedIndex (1);
    }
    else
    {
      combo2.setSelectedIndex (2);
    }
  }


  /**
   * Hier werden die Textfelder ausgelesen und der Datentraeger 
   * geaendert. Tritt ein Fehler auf wird die Farbe des Status Feld auf
   * Rot gesetzt andernfalls wird das Start Layout erzeugt.
   * @NameEnthaeltZahlen
   * @KeinDatumFormat Falls das Datum nicht dem Format entspricht.
   */
  public void datentraegerAendern () throws KeinDatumFormat,
      NameEnthaeltZahlenSonderzeichen
  {
    int laenge, breite, hoehe;
    Abmessung a;
    if (txt_titel.getText ().isEmpty () == true
        || txt_datum.getText ().isEmpty () == true
        || txt_abmessung_laenge.getText ().isEmpty () == true
        || txt_abmessung_hoehe.getText ().isEmpty () == true
        || txt_abmessung_breite.getText ().isEmpty () == true)
    {
      JOptionPane.showMessageDialog (null, "" + uebersetzung.lokal
	  .gibUebersetzung ("Alle mit einem * markierten Felder " +
	  "muessen ausgefuellt werden"), null, JOptionPane
	  .WARNING_MESSAGE);
      txt_status.setBackground (Color.RED);
    }
    else
    {
      d.setzeTitel (txt_titel.getText ());
      d.setzeDatum (txt_datum.getText ());
      laenge = DatumParser.stringZuInteger (txt_abmessung_laenge
          .getText ());
      breite = DatumParser.stringZuInteger (txt_abmessung_breite
          .getText ());
      hoehe = DatumParser.stringZuInteger (txt_abmessung_hoehe
          .getText ());
      a = new Abmessung (laenge, hoehe, breite);
      d.setzeAbmessungen (a);

      if (hinzugefuegteNotizen.size () >= 1)
      {
        for (int i = 0; i < hinzugefuegteNotizen.size (); i++)
        {
          d.notizHinzufuegen (hinzugefuegteNotizen.get (i), per
              .gibBenutzer (Dashboard.nutzerID ()));
        }
      }

      if (txt_sachgebiet.getText ().isEmpty () == false)
      {
        d.setzeSachgebiet (txt_sachgebiet.getText ());
      }

      if (txt_fachgebiet.getText ().isEmpty () == false)
      {
        d.setzeFachgebiet (txt_fachgebiet.getText ());
      }

      if (txt_stichworte.getText ().isEmpty () == false)
      {
        d.stichwortHinzufuegen (txt_stichworte.getText ());
      }

      if (txt_umfang.getText ().isEmpty () == false)
      {
        d.setzeUmfang (txt_umfang.getText ());
      }

      if (txt_ausgabe.getText ().isEmpty () == false)
      {
        d.setzeAusgabe (txt_ausgabe.getText ());
      }

      if (txt_serie.getText ().isEmpty () == false)
      {
        d.setzeSerie (txt_serie.getText ());
      }

      if (txt_thema.getText ().isEmpty () == false)
      {
        d.setzeThema (txt_thema.getText ());
      }

      if (txt_speicherplatz.getText ().isEmpty () == false
          && !txt_speicherplatz.getText ().equals ("MB"))
      {
        try
        {
          d.setzeSpeicherplatz (DatumParser
              .stringZuLong (txt_speicherplatz.getText ()));
        }
        catch (IllegalArgumentException e1)
        {
          JOptionPane.showMessageDialog (null, "" + uebersetzung.lokal
              .gibUebersetzung ("Keine gueltige Speicherplatz Angabe")
              + "\n" + uebersetzung.lokal.gibUebersetzung ("Nur " +
              "positive ganze Zahlen erlaubt"), null, JOptionPane
              .WARNING_MESSAGE);
          txt_status.setBackground (Color.red);
          txt_status.setText ("");
          return;
        }
      }

      if (txt_teil.getText ().isEmpty () == false)
      {
        d.setzeTeil (txt_teil.getText ());
      }

      if (txt_spielzeit.getText ().isEmpty () == false 
	  && !txt_spielzeit.getText ().equals (uebersetzung.lokal
	  .gibUebersetzung ("Minuten")))
      { 
        try
        {
          d.setzeSpielzeit (DatumParser.stringZuInteger (txt_spielzeit
              .getText ()));
        }
        catch (IllegalArgumentException e1)
        {
          JOptionPane.showMessageDialog (null, "" + uebersetzung.lokal
              .gibUebersetzung ("Keine gueltige Spielzeit Angabe")
              + "\n" + uebersetzung.lokal.gibUebersetzung ("Nur " +
              "positive ganze Zahlen erlaubt"), null, JOptionPane
              .WARNING_MESSAGE);
          txt_status.setBackground (Color.red);
          txt_status.setText ("");
          return;
        }
      }

      if (txt_version.getText ().isEmpty () == false)
      {
        d.setzeVersion (txt_version.getText ());
      }

      if (txt_verlag.getText ().isEmpty () == false)
      {
        d.setzeVerlag (txt_verlag.getText ());
      }

      if (txt_beteiligt.getText ().isEmpty () == false)
      {
        d.beteiligteHinzufuegen (txt_beteiligt.getText ());
      }

      if (((String) combo2.getSelectedItem ())
          .equals (uebersetzung.lokal.gibUebersetzung ("DATEN")))
      {
        d.setzeTyp ("DATEN");
      }
      else if (((String) combo2.getSelectedItem ())
          .equals (uebersetzung.lokal.gibUebersetzung ("VIDEO")))
      {
        d.setzeTyp ("VIDEO");
      }
      else
      {
        d.setzeTyp ("AUDIO");
      }
      
      txt_status.setBackground (Color.GREEN);
      start ();
    }
  }


  /**
   * Das aktuelle Layout wird entfernt und das Ebook Layout wird 
   * erzeugt. Die Labels, Textfelder, ActionListener und Buttons werden
   * initialisiert und dem JPanel hinzugefuegt.
   * @param me Das Medium was veraendert werden soll.
   */
  public void hoerbuch (Medium me)
  {
    h = (Hoerbuch) me;
    removeAll ();
    hoerbuchInit ();
    setLayout (new GridLayout (12, 4));
    add (titel);
    add (txt_titel);
    add (datum);
    add (txt_datum);
    add (abmessungen);
    add (txt_abmessung_laenge);
    txt_abmessung_laenge.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("laenge") + " mm");
    add (txt_abmessung_hoehe);
    txt_abmessung_hoehe.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("hoehe") + " mm");
    add (txt_abmessung_breite);
    txt_abmessung_breite.setText ("  "
        + uebersetzung.lokal.gibUebersetzung ("breite") + " mm");
    add (ausgabe);
    add (txt_ausgabe);
    add (verlag);
    add (txt_verlag);
    add (notiz);
    add (notizHinzufuegen);
    add (fachgebiet);
    add (txt_fachgebiet);
    add (sachgebiet);
    add (txt_sachgebiet);
    add (stichworte);
    add (txt_stichworte);
    add (umfang);
    add (txt_umfang);
    add (thema);
    add (txt_thema);
    add (beteiligt);
    add (txt_beteiligt);
    add (serie);
    add (txt_serie);
    add (teil);
    add (txt_teil);
    add (version);
    add (txt_version);
    add (spielzeit);
    add (txt_spielzeit);
    add (speicherplatz);
    add (txt_speicherplatz);
    add (autoren);
    add (txt_autoren);
    add (isbn);
    add (txt_isbn);
    add (sprecher);
    add (txt_sprecher);
    add (typ);
    add (combo2);
    add (aendern, BorderLayout.EAST);
    txt_status.setEditable (false);
    add (txt_status);
    add (abbrechen);
    validate ();
    hoerbuchReiterfuellen (h);
  }


  /**
   * Hier werden die Labels, Textfelder, Buttons und ActionListener 
   * initialisiert.
   */
  public void hoerbuchInit ()
  {
    titel = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Titel1") + "*: ");
    datum = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Datum") + "*: ");
    abmessungen = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Abmessung") + "*: ");
    verlag = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Verlag1") + ": ");
    ausgabe = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Ausgabe") + ": ");
    notiz = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Notizen") + ": ");
    fachgebiet = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Fachgebiet") + ": ");
    sachgebiet = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Sachgebiet") + ": ");
    stichworte = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Stichworte") + ": ");
    umfang = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Umfang") + ": ");
    beteiligt = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Beteiligte Personen")
        + ": ");
    serie = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Serie") + ": ");
    speicherplatz = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Speicherplatz") + ": ");
    teil = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Teil") + ": ");
    typ = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Datentyp") + ": ");
    spielzeit = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Spielzeit") + ": ");
    version = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Version") + ": ");
    thema = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Thema") + ": ");
    autoren = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Autoren") + ": ");
    isbn = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("ISBN") + "*: ");
    sprecher = new JLabel ("  "
        + uebersetzung.lokal.gibUebersetzung ("Sprecher") + ": ");

    txt_titel = new JTextField ();
    txt_datum = new JTextField ();
    txt_abmessung_laenge = new JTextField ();
    txt_abmessung_breite = new JTextField ();
    txt_abmessung_hoehe = new JTextField ();
    txt_verlag = new JTextField ();
    txt_ausgabe = new JTextField ();
    txt_fachgebiet = new JTextField ();
    txt_sachgebiet = new JTextField ();
    txt_stichworte = new JTextField ();
    txt_umfang = new JTextField ();
    txt_beteiligt = new JTextField ();
    txt_serie = new JTextField ();
    txt_status = new JTextField ();
    txt_speicherplatz = new JTextField ();
    txt_teil = new JTextField ();
    txt_version = new JTextField ();
    txt_spielzeit = new JTextField ();
    txt_thema = new JTextField ();
    txt_autoren = new JTextField ();
    txt_isbn = new JTextField ();
    txt_sprecher = new JTextField ();
    combo2 = new JComboBox<String> (typen);
    
    notizHinzufuegen = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Notiz Hinzufuegen"));

    notizHinzufuegen.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        notizHinzufuegen ();
      }
    });

    aendern = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Hoerbuch Aendern"));
    aendern.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        try
        {
          hoerbuchAendern ();
        }
        catch (VergebeneISBNAusnahme e5)
        {
          JOptionPane.showMessageDialog (null, "" + e5.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
          txt_status.setBackground (Color.red);
          txt_status.setText ("");
        }
        catch (NameEnthaeltZahlenSonderzeichen e1)
        {
          JOptionPane.showMessageDialog (null, "" + e1.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (KeinDatumFormat e2)
        {
          JOptionPane.showMessageDialog (null, "" + e2.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (IllegalArgumentException e3)
        {
          JOptionPane.showMessageDialog (null, "" + e3.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
        catch (UngueltigesDatumAusnahme e4)
        {
          JOptionPane.showMessageDialog (null, "" + e4.getMessage (),
              null, JOptionPane.WARNING_MESSAGE);
        }
      }
    });
    
    abbrechen = new JButton (uebersetzung.lokal
        .gibUebersetzung ("Abbrechen"));
    abbrechen.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        abbrechen ();
      }
    });
  }


  /**
   * Holt die Daten des Mediums das bearbeitet werden soll und setzt die
   * Daten in die entsprechenden Textfelder
   */
  public void hoerbuchReiterfuellen (Hoerbuch h)
  {
    txt_titel.setText (h.gibTitel ());
    txt_datum.setText (h.gibErscheinungsdatumString ());
    txt_abmessung_laenge.setText ("" + h.gibAbmessung ().gibLaenge ());
    txt_abmessung_breite.setText ("" + h.gibAbmessung ().gibBreite ());
    txt_abmessung_hoehe.setText ("" + h.gibAbmessung ().gibHoehe ());
    txt_ausgabe.setText (h.gibAusgabe ());
    
    if (h.gibVerlag () != null)
    {
      txt_verlag.setText (h.gibVerlag ().gibName ());
    }
    
    txt_isbn.setText ("" + h.gibIsbn13 ());
    txt_fachgebiet.setText (h.gibFachgebiet ());
    txt_sachgebiet.setText (h.gibSachgebiet ());
    txt_stichworte.setText (h.gibStichworteString ());
    txt_umfang.setText (h.gibUmfang ());
    txt_thema.setText (h.gibThema ());
    txt_beteiligt.setText (h.gibBeteiligteString ());
    txt_serie.setText (h.gibSerie ());
    txt_teil.setText (h.gibTeil ());
    txt_spielzeit.setText ("" + h.gibSpielzeit ());
    txt_speicherplatz.setText ("" + h.gibSpeicherplatz ());
    txt_version.setText (h.gibVersion ());
    txt_autoren.setText (h.gibAutorenListeString ());
    txt_sprecher.setText (h.gibSprecherListeString ());
    
    if (h.gibDatentraegertyp ().toString ().equals (
        uebersetzung.lokal.gibUebersetzung ("DATEN")))
    {
      combo2.setSelectedIndex (0);
    }
    else if (h.gibDatentraegertyp ().toString ().equals (
        uebersetzung.lokal.gibUebersetzung ("VIDEO")))
    {
      combo2.setSelectedIndex (1);
    }
    else
    {
      combo2.setSelectedIndex (2);
    }
  }


  /**
   * Hier werden die Textfelder ausgelesen und das Hoerbuch geaendert.
   * Tritt ein Fehler auf wird die Farbe des Status Feld auf Rot 
   * gesetzt andernfalls wird das Start Layout erzeugt.
   * @NameEnthaeltZahlen
   * @KeinDatumFormat Falls das Datum nicht dem Format entspricht.
   * @VergebeneISBNAusnahme wird geworfen wenn schon ein anderes Medium
   * diese ISBN besitzt.
   */
  public void hoerbuchAendern () throws KeinDatumFormat,
      NameEnthaeltZahlenSonderzeichen, VergebeneISBNAusnahme
  {
    if (txt_titel.getText ().isEmpty () == true
        || txt_datum.getText ().isEmpty () == true
        || txt_abmessung_laenge.getText ().isEmpty () == true
        || txt_abmessung_hoehe.getText ().isEmpty () == true
        || txt_abmessung_breite.getText ().isEmpty () == true
        || txt_isbn.getText ().isEmpty () == true)
    {
      JOptionPane.showMessageDialog (null, "" + uebersetzung.lokal
	  .gibUebersetzung ("Alle mit einem * markierten Felder " +
	  "muessen ausgefuellt werden"), null, JOptionPane
	  .WARNING_MESSAGE);
      txt_status.setBackground (Color.RED);
    }
    else
    {
      h.setzeTitel (txt_titel.getText ());
      h.setzeDatum (txt_datum.getText ());
      int laenge = DatumParser.stringZuInteger (txt_abmessung_laenge
          .getText ());
      int breite = DatumParser.stringZuInteger (txt_abmessung_breite
          .getText ());
      int hoehe = DatumParser.stringZuInteger (txt_abmessung_hoehe
          .getText ());
      Abmessung a = new Abmessung (laenge, hoehe, breite);
      h.setzeAbmessungen (a);
      h.setzeISBN (txt_isbn.getText (), h.gibMediumId ());

      if (hinzugefuegteNotizen.size () >= 1)
      {
        for (int i = 0; i < hinzugefuegteNotizen.size (); i++)
        {
          h.notizHinzufuegen (hinzugefuegteNotizen.get (i), per
              .gibBenutzer (Dashboard.nutzerID ()));
        }
      }

      if (txt_sachgebiet.getText ().isEmpty () == false)
      {
        h.setzeSachgebiet (txt_sachgebiet.getText ());
      }

      if (txt_fachgebiet.getText ().isEmpty () == false)
      {
        h.setzeFachgebiet (txt_fachgebiet.getText ());
      }

      if (txt_stichworte.getText ().isEmpty () == false)
      {
        h.stichwortHinzufuegen (txt_stichworte.getText ());
      }

      if (txt_umfang.getText ().isEmpty () == false)
      {
        h.setzeUmfang (txt_umfang.getText ());
      }

      if (txt_verlag.getText ().isEmpty () == false)
      {
        h.setzeVerlag (txt_verlag.getText ());
      }

      if (txt_ausgabe.getText ().isEmpty () == false)
      {
        h.setzeAusgabe (txt_ausgabe.getText ());
      }

      if (txt_serie.getText ().isEmpty () == false)
      {
        h.setzeSerie (txt_serie.getText ());
      }

      if (txt_thema.getText ().isEmpty () == false)
      {
        h.setzeThema (txt_thema.getText ());
      }

      if (txt_speicherplatz.getText ().isEmpty () == false
          && !txt_speicherplatz.getText ().equals ("MB"))
      {
        try
        {
          h.setzeSpeicherplatz (DatumParser
              .stringZuLong (txt_speicherplatz.getText ()));
        }
        catch (IllegalArgumentException e1)
        {
          JOptionPane.showMessageDialog (null, "" + uebersetzung.lokal
              .gibUebersetzung ("Keine gueltige Speicherplatz Angabe")
              + "\n" + uebersetzung.lokal.gibUebersetzung ("Nur" +
              " positive ganze Zahlen erlaubt"), null, JOptionPane
              .WARNING_MESSAGE);
          txt_status.setBackground (Color.red);
          txt_status.setText ("");
          return;
        }
      }

      if (txt_teil.getText ().isEmpty () == false)
      {
        h.setzeTeil (txt_teil.getText ());
      }

      if (txt_spielzeit.getText ().isEmpty () == false
          && !txt_spielzeit.getText ().equals (uebersetzung.lokal
          .gibUebersetzung ("Minuten")))
      { 
        try
        {
          h.setzeSpielzeit (DatumParser.stringZuInteger (txt_spielzeit
              .getText ()));
        }
        catch (IllegalArgumentException e1)
        {
          JOptionPane.showMessageDialog (null, "" + uebersetzung.lokal
              .gibUebersetzung ("Keine gueltige Spielzeit Angabe")
              + "\n" + uebersetzung.lokal.gibUebersetzung ("Nur " +
              "positive ganze Zahlen erlaubt"), null, JOptionPane
              .WARNING_MESSAGE);
          txt_status.setBackground (Color.red);
          txt_status.setText ("");
          return;
        }
      }

      if (txt_version.getText ().isEmpty () == false)
      {
        h.setzeVersion (txt_version.getText ());
      }

      if (txt_autoren.getText ().isEmpty () == false)
      {
        h.autorenHinzufuegen (txt_autoren.getText ());
      }

      if (txt_sprecher.getText ().isEmpty () == false)
      {
        h.sprecherHinzufuegen (txt_sprecher.getText ());
      }

      if (txt_beteiligt.getText ().isEmpty () == false)
      {
        h.beteiligteHinzufuegen (txt_beteiligt.getText ());
      }

      if (((String) combo2.getSelectedItem ())
          .equals (uebersetzung.lokal.gibUebersetzung ("DATEN")))
      {
        h.setzeTyp ("DATEN");
      }
      else if (((String) combo2.getSelectedItem ())
          .equals (uebersetzung.lokal.gibUebersetzung ("VIDEO")))
      {
        h.setzeTyp ("VIDEO");
      }
      else
      {
        h.setzeTyp ("AUDIO");
      }
      
      txt_status.setBackground (Color.GREEN);
      start ();
    }
  }

  
  /**
   * Wird Abbrechen aufgerufen werden die Aenderungen am Medium nicht
   * gespeichert und es wird das Start Layout erzeugt.
   */
  public void abbrechen ()
  {
    String[] Optionen = { uebersetzung.lokal.gibUebersetzung ("Ja"), 
        uebersetzung.lokal.gibUebersetzung ("Nein") };
   
    int Auswahl = JOptionPane.showOptionDialog (null, uebersetzung
	.lokal.gibUebersetzung ("Wirklich Abbrechen") + "?", 
	uebersetzung.lokal.gibUebersetzung ("Abbrechen"), JOptionPane
	.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, Optionen, 
	null);
    
    if (Auswahl == JOptionPane.YES_OPTION)
    {
      start ();
    }
  }

  
  /**
   * Erzeugt ein Fenster wo man mehrere Notizen dem Medium hinzufuegen
   * kann. Die Notizen werden dem Medium aber erst zugewiesen wenn der
   * Button Aendern gedrueckt wurde.
   */
  public void notizHinzufuegen ()
  {
    hinzufuegen = new JFrame (uebersetzung.lokal
        .gibUebersetzung ("Notizen"));
    text = new JTextArea ();
    hinzugefuegteNotizen = new ArrayList<String> ();
    notizenHinzufuegen = new JButton (uebersetzung.lokal.
        gibUebersetzung ("Notiz Hinzufuegen"));
    notizenHinzufuegen.addActionListener (new ActionListener ()
    {
      public void actionPerformed (ActionEvent e)
      {
        if (text.getText ().isEmpty () == false)
        {
          hinzugefuegteNotizen.add (text.getText ());
          text.setText ("");
        }
      }
    });
    
    hinzufuegen.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);
    hinzufuegen.setLayout (new GridLayout (2, 1));
    hinzufuegen.add (text);
    hinzufuegen.add (notizenHinzufuegen);
    hinzufuegen.setVisible (true);
    hinzufuegen.pack ();
  }
}